/**
 * @file CartLocal.java
 * Projet eCOM 2010 (Miage Descartes)
 * @author Doido Sébastien
 * @version 2
 * @brief Interface du bean dédié au traitement du panier client
 */
package ecom.beans;

import ecom.beans.CartBean.CartState;
import java.util.Collection;

/**
 * @brief Opérations réalisables pour la gestion du panier d'achat
 * @author Doido Sébastien
 */
public interface CartLocal {
	/**
     * @brief Ajoute un produit dans le panier
     * @param stock : ligne de stock inventaire
     * @param quantity : quantité désirée 
     * @throws ecom.beans.CartException : Erreur (panier acheté)
     */
    void addProduct(WarehouseLineBean stock, int quantity) throws CartException; //ajoute un produit dans le caddie.

    /**
     * @brief Retire un produit du panier
     * @param stock : ligne de stock inventaire
     * @param quantity : quantité à retirer
     * @throws ecom.beans.CartException : Erreur (erreur quantité)
     */
    public void removeProduct(WarehouseLineBean stock, int quantity) throws CartException;
    
    /**
     * @brief Achat du contenu du panier par un client
     * @param customer : client
     * @throws ecom.beans.CartException : erreur (panier vide, solde insuffisant...)
     * @return montant total du panier
     */
    double buy(AccountBean customer) throws CartException; //achète les produits contenus dans le caddie avec un num�ro de compte client.

    /**
     * @brief renvoie les lignes de commande
     * @return les lignes de commande
     */
    Collection<CartLine> getProducts(); //retourne la liste des produits contenus dans le caddie.
	
    /**
     * @brief renvoie l'état du panier
     * @return l'état du panier
     */
    public CartState getState();

    /**
     * @brief renvoie le montant total du panier
     * @return le montant total du panier
     */
    double getTotalPrice(); //retourne le prix total des produits contenus dans le caddie.

    /**
     * @brief Réinitialise le panier
     */
    public void emptyCart();

}
